package com.example.demo.controller;

import com.example.demo.model.Student;
import com.example.demo.model.User;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;


@Controller //Spring框架启动时,将其加载到IoC容器中
@ResponseBody  // 当前类返回的不是一个静态页面,如果不加该注解,Spring会认为返回的是一个view页面,
// 然后Spring会去找这个页面,很显然这里没有,然后就会显示404
@RequestMapping("/user")//当使用到"/user"时可以访问到当前类
public class WebController {
    @RequestMapping(value="/hi",method = RequestMethod.GET)//当使用到"/user/hi"时可以访问到当前方法
    //@RequestMapping(value="/hi",method = RequestMethod.POST)
    public Object sayHello(HttpServletRequest request, HttpServletResponse response){
        return "Hello,"+request.getParameter("name");
    }

    /**
     * 获取基本类型参数
     * @param age
     * @return
     */
    @GetMapping("/get1")
    public String getParameter1(Integer age,String name){
        return "Hi,"+name+" 年龄:"+age;
    }

    /**
     * 获取对象
     * @param student
     * @return
     */
    @GetMapping("/get2")
    public String getParameter2(Student student){
        return student.toString()+"   我是"+student.getName();
    }

//    /**
//     * 获取form表单参数
//     * @param name
//     * @param password
//     * @return
//     */
//    @RequestMapping("/login")
//    public String login(String name,String password){
//        return "<h1>用户名:"+name+"   密码:"+password+"</hi>";
//
//    }

    /**
     * 获取form表单参数(对象)
     * @param user
     * @return
     */
    @RequestMapping("/login")
    public String login(User user){
        return "<h1>用户名:"+user.getName()+"   密码:"+user.getPassword()+"</hi>";
    }

    /**
     * 获取JSON参数
     * @param user
     * @return
     */

    @RequestMapping("/get3")
    public HashMap<String,Object> getParameter3(@RequestBody User user){
        HashMap<String,Object> result=new HashMap<>();
        result.put("name",user.getName());
        result.put("password",user.getPassword());
        return result;
    }
//接收前端传过来的两个参数,一个name,一个是文件myfile(myfile需要与前端一致),将myfile文件赋给file

    /**
     * 获取文件并上传
     * @param name
     * @param file
     * @return
     * @throws IOException
     */

    @RequestMapping("/get4")
    public String getParameter4(String name, @RequestPart("myfile")MultipartFile file) throws IOException {
        //保存文件
        file.transferTo(new File("D:\\java-spring\\spring-mvc-blog\\img.png"));//将客户端的文件file保存到本地
        return "ok";
    }

    /**
     * spring mvc 获取cookie值
     */
    @RequestMapping("/get5")
    public String getParameter5(@CookieValue("zl110") String zl){
        return zl;
    }

    /**
     * shezhi Session
     */
    @RequestMapping("/setsession")
    public String setSession(HttpServletRequest request){
        //获取HttpSession对象,参数设置为true,表示如果没有session对象就会创建一个session
        HttpSession session= request.getSession(true);
        if(session!=null){
            session.setAttribute("name","java");
        }
        return "存储成功";
    }

    /**
     * 获取session
     */
    @RequestMapping("/getsession")
    public String getSession(@SessionAttribute(value="name",required = false) String username){
        return "name:"+username;
    }

    /**
     * 获取header
     */
    @RequestMapping("/getheader")
    public String getHeader(@RequestHeader("User-Agent") String userAgent){
        return "User-Agent: "+userAgent;
    }

    /**
     *重命名前端参数
     */
    @RequestMapping("/getname")
    public String getName(@RequestParam(value="name",required = false) String username){
        return "name:"+username;
    }





}
